package com.zpf.controller;

import com.zpf.pojo.User;
import com.zpf.service.UserService;
import com.zpf.service.impl.UserServiceImpl;
import com.zpf.utils.Constants;
import com.zpf.utils.StrUtils;
import org.apache.commons.beanutils.BeanUtils;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map;

//用户界面
@WebServlet("/user")
public class UserController extends BaseServlet {
    UserService userService = new UserServiceImpl();

    //校验用户注册，写注册方法，用户名是否可用
    public void check(HttpServletRequest request,HttpServletResponse response) throws IOException {
        //1.接收用户名参数
        String username = request.getParameter("username");
        //2.调用service，到数据库中查询这个用户名是否可用，存在不可用
        boolean check = userService.check(username);
        //3.将是否可用信息返回页面展示
        if(check){
            response.getWriter().write(Constants.NOT_HAS_USER);
        }else {
            response.getWriter().write(Constants.HAS_USER);
        }

    }
    //新用户注册
    public String register(HttpServletRequest request,HttpServletResponse response) throws Exception{
        //1.获取页面传入的所有参数,k,结束页面input框中的name属性，value是input框中输入的值commons-beanutils-1.8.3.jar
        Map<String, String[]> parameterMap = request.getParameterMap();

        //2.将参数封装成User对象
        //@1创建一个用户对象
        User user = new User();
        //@2利用beanUtils工具类，将map中的数据全部自动set到user对象中
        //实体类必须实现Serializable序列化接口，user对象的属性必须和前端的input界面name一样
        BeanUtils.populate(user,parameterMap);
        //3.调用service，将用户对象保存在mysql数据库中
        int count = userService.createUser(user);
        //4.调转到注册成功界面
        if(count >0){
            //注册成功
            return "redirect:/registerSuccess.jsp";
        }else {
            //注册失败
            return "redirect:/register.jsp";
        }



    }



    //消费者用户登录
    public String login(HttpServletRequest request, HttpServletResponse response){
        //获取用户名参数
        String username = request.getParameter("username");
        //获取用户密码参数
        String password = request.getParameter("password");
        //获取用户验证码参数
        String code = request.getParameter("code");
        //获取用户是否要自动登录
        String auto = request.getParameter("auto");
        //判断用户名，密码，验证码不为空，为空重定向
        if(! (StrUtils.empty(username) || StrUtils.empty(password) || StrUtils.empty(code))){
            request.setAttribute("msg","用户名，密码，验证码都不能为空");
            return "forward://login.jsp";
        }

        //校验验证码是否正确，不正确重定向登录页面
        String sessionCode = (String) request.getSession().getAttribute("code");
      //不区分大小写
        if(!code.equalsIgnoreCase(sessionCode)){
            request.setAttribute("userName",username);
            request.setAttribute("password",password);
            request.setAttribute("msg","验证码输入错误");
            return "forward:/login.jsp";
        }
        //调用service完成用户名密码校验

        User user = userService.login(username, password);

        //判断用户名密码是否正确，错误则返回提示信息
        if (user == null) {
            request.setAttribute("userName",username);
            request.setAttribute("password",password);
            request.setAttribute("msg","用户名或者密码错误");
            //跳转到登录页面
            return "forward:/login.jsp";
        }

        //登录成功，将用户信息放入tomcat的session会话中携带
            request.getSession().setAttribute("loginUser",user);

        //判断是否勾选自动登录，自动登录设置
        if("on".equals(auto)){
            Cookie cookie = new Cookie(Constants.AUTO_NAME, user.getUsername());

            //
            cookie.setPath("/");
            //设置cookie保存时间
            cookie.setMaxAge(60*60*24*14);
            //通过响应将cookie写回到浏览器中保存
            response.addCookie(cookie);
        }


        //跳转到首页
        return "redirect:/goods?method=index";

    }
}
